.\" Copyright (c) 1983, 1991, 1993
.\"	The Regents of the University of California.  All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"     @(#)initgroups.3	8.1 (Berkeley) 6/4/93
.\" $FreeBSD: src/lib/libc/gen/initgroups.3,v 1.10 2001/10/01 16:08:51 ru Exp $
.\"
.\" @APPLE_LICENSE_HEADER_START@
.\"
.\" Portions Copyright (c) 2003-2013 Apple Inc.  All Rights Reserved.
.\"
.\" This file contains Original Code and/or Modifications of Original Code
.\" as defined in and that are subject to the Apple Public Source License
.\" Version 2.0 (the 'License'). You may not use this file except in
.\" compliance with the License. Please obtain a copy of the License at
.\" http://www.opensource.apple.com/apsl/ and read it before using this
.\" file.
.\"
.\" The Original Code and all software distributed under the License are
.\" distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
.\" EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
.\" INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
.\" FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
.\" Please see the License for the specific language governing rights and
.\" limitations under the License.
.\"
.\" @APPLE_LICENSE_HEADER_END@
.\"
.Dd June 4, 1993
.Dt INITGROUPS 3
.Os
.Sh NAME
.Nm initgroups
.Nd initialize group access list
.Sh LIBRARY
Standard system libraries.
.Sh SYNOPSIS
.In unistd.h
.Ft int
.Fn initgroups "const char *name" "int basegid"
.Sh DESCRIPTION
The
.Fn initgroups
function calculates a group access list for the user
specified in
.Fa name .
This group list is then saved in the kernel credentials for the current process.
The
.Fa basegid
is included in the groups list.
Typically this value is given as
the default group associated with the user's account record.
.Pp
This function sets at most 16 group IDs in the process credentials.
This list can be retrieved using the
.Xr getgroups 2
function.
Note that OS X supports group membership in an unlimited number of groups.
The OS X kernel uses the group list stored in the process credentials only
as an initial cache.
Additional group memberships are determined by communication between the operating system and the
.Nm opendirectoryd
daemon.
.Pp
Processes should not use the group ID numbers from
.Xr getgroups 2
to determine a user's group membership.
The list obtained from
.Fn getgroups
may only be a partial list of a user's group membership.
Membership checks should use the
.Xr mbr_gid_to_uuid 3 ,
.Xr mbr_uid_to_uuid 3 ,
and
.Xr mbr_check_membership 3
functions.
.Sh RETURN VALUES
The
.Fn initgroups
function
returns 0 on success.
On failure, this function will return -1 and set
.Va errno 
to one of the following values:
.Bl -tag -width ".Bq Er EFAULT"
.It Bq Er EPERM
The caller's effictive UID is not zero.
.It Bq Er EINVAL
Internal error, an invalid array size was supplied to the kernel.
.It Bq Er EFAULT
Internal error, invalid data was supplied to the kernel.
.El
.Sh SEE ALSO
.Xr getgroups 2 ,
.Xr getgrouplist 3 ,
.Xr mbr_gid_to_uuid 3 ,
.Xr mbr_uid_to_uuid 3 ,
.Xr mbr_check_membership 3 .
.Sh HISTORY
The
.Fn initgroups
function appeared in
.Bx 4.2 .
